package modele;

import java.util.ArrayList;
import java.util.Observable;
/**
 * Vérifie que les champs sont correctes, donne une liste des choix possibles et effectue la recherche
 * @author tomu
 *
 */
public class ModeleChoixListe extends Observable{
	private String champ;
	/*
	 * 1 si titre
	 * 2 si auteurs
	 * 3 si dessinateurs
	 * 4 si genres
	 * 5 si editeur
	 * 6 si annee
	 * 7 si note
	 */
	private int typechamp;
	private ModeleP modele;
	/**
	 *
	 * @param collec la collection principale
	 * @param modele le modelePrincipal
	 */
	public ModeleChoixListe (CollectionBD collec,ModeleP modele){
		typechamp=1;
		this.modele=modele;
	}
	/**
	 *
	 * @return la liste des sugestion de recherche
	 */
	public ArrayList<String> getPossibilites(){
		ArrayList<String> l;
		if(typechamp==1)
			l=modele.getCollec().getTitres(champ);
		else if(typechamp==2)
			l=modele.getCollec().getAuteurs(champ);
		else if(typechamp==3)
			l=modele.getCollec().getDessinateurs(champ);
		else if(typechamp==4)
			l=modele.getCollec().getEditeurs(champ);
		else if(typechamp==5)
			l=modele.getCollec().getEditeurs(champ);
		else if(typechamp==6)
			l=modele.getCollec().getDate(champ);
		else l=modele.getCollec().getNote(champ);
		l.subList(0, 5);
		return l;
	}
	/**
	 * signale que le champ corespond a un titre
	 */
	public void ChampTitre(){
		typechamp=1;
		setChamp(champ);
		setChanged();notifyObservers();
	}
	/**
	 * signale que le champ corespond à celui des auteurs
	 */
	public void ChampAuteurs(){
		typechamp=2;
		setChamp(champ);
		setChanged();notifyObservers();
	}
	/**
	 * signale que le champ corespond à celui des dessinateurs
	 */
	public void ChampDessinateur(){
		setChamp(champ);
		typechamp=3;
		setChanged();notifyObservers();
	}
	/**
	 * signale que le champ corespond à celui des genres
	 */
	public void ChampGenres(){
		typechamp=4;
		setChamp(champ);
		setChanged();notifyObservers();
	}
	/**
	 * signale que le champ corespond a un editeur
	 */
	public void ChampEditeurs(){
		typechamp=5;
		setChamp(champ);
		setChanged();notifyObservers();
	}
	/**
	 * signale que le champ corespond à celui de l'annee
	 */
	public void ChampAnnee(){
		typechamp=6;
		setChamp(champ);
		setChanged();notifyObservers();
	}
	/**
	 * signale que le champ corespond à celui de la note
	 */
	public void ChampNote(){
		typechamp=7;
		setChamp(champ);
		setChanged();notifyObservers();
	}

	/**
	 * 
	 * modifie la sousbdteque selon le type du champ
	 * @param champ la nouvelle valuer de champ
	 */
	public void setChamp(String champ){
		CollectionBD souscollec;
		this.champ=champ;

		if(typechamp==1)
			souscollec=modele.getCollec().getSousCollecByTitre(champ);
		else if(typechamp==2){
			souscollec=modele.getCollec();
			for(String s:champ.split("[,;]",-1)){
				souscollec=souscollec.getSousCollecByAuteur(s.trim());
			}
		}else if(typechamp==3){
			souscollec=modele.getCollec();
			for(String s:champ.split("[,;]",-1)){
				souscollec=souscollec.getSousCollecByDessinateur(s.trim());
			}
		}else if(typechamp==4){
			souscollec=modele.getCollec();
			for(String s:champ.split("[,;]",-1)){
				souscollec=souscollec.getSousCollecByGenre(s.trim());
			}
		}else if(typechamp==5)
			souscollec=modele.getCollec().getSousCollecByEditeur(champ);
		else if(typechamp==6)
			souscollec=modele.getCollec().getSousCollecByAnnee(champ);
		else if(typechamp==7)
			souscollec=modele.getCollec().getSousCollecByNote(champ);
		else 
			souscollec=modele.getCollec();
		modele.setSousBD(souscollec);
	}
}

